function min(num1, num2)
    if (num1 < num2) then
       result = num1;
    else
       result = num2;
    end

    return result;
end

print("调用函数")
print("两值比较最小值为 ",min(20,22))
print("两值比较最小值为 ",min(14,15))

print("可以将函数作为参数传递")
myprint = function(param)
    print("[PRINT] -> ", param)
end

function sumCustom(num1, num2, func)
    result = num1 + num2
    func(result)
end
sumCustom(2020,20, myprint)

print("函数可以有多个返回值")
function maximum(a)
    local mi = 1             -- 最大值索引
    local m = a[mi]          -- 最大值
    for i,val in ipairs(a) do
       if val > m then
           mi = i
           m = val
       end
    end
    return m, mi
end
print(maximum({1997,7,1,1949,10,1}))

print("函数可以接受可变数目的参数，用 ... 表示")
function sum(...)
local s = 0
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组
    s = s + v
  end
  return s
end
print(sum(1,2,3,4,5,6,7))
print("可以通过 select(\"#\"...) 来获取参数个数")
function average(...)
    result = 0
    local arg={...}
    for i,v in ipairs(arg) do
       result = result + v
    end
    print("总共传入 " .. select("#",...) .. " 个数")
    return result/select("#",...)
end
print("平均值为", average(1,3,5,7,9))
print("调用 select 时，必须传入一个固定实参 selector(选择开关) 和一系列变长参数。如果 selector 为数字 n，那么 select 返回参数列表中从索引 n 开始到结束位置的所有参数列表")
function f(...)
    a = select(3,...)  -->从第三个位置开始，变量 a 对应右边变量列表的第一个参数
    print (a)
    print (select(3,...)) -->打印所有列表参数
end
f(0,1,2,3,4,5)

print("----------")
print("计算运算符展示")
a = 14
b = 5
print("a=",a)
print("b=",b)
c = a + b
print("a + b 的值为 ", c )
c = a - b
print("a - b 的值为 ", c )
c = a * b
print("a * b 的值为 ", c )
c = a / b
print("a / b 的值为 ", c )
c = a % b
print("a % b 的值为 ", c )
c = a // b
print("a // b 的值为 ", c )
c = a^2
print("a^2 的值为 ", c )
c = -a
print("-a 的值为 ", c )

print("关系运算符展示")
print("a=",a)
print("b=",b)
if( a == b )
then
   print("a 等于 b" )
else
   print("a 不等于 b" )
end

if( a ~= b )
then
   print("a 不等于 b" )
else
   print("a 等于 b" )
end

if ( a < b )
then
   print("a 小于 b" )
else
   print("a 大于等于 b" )
end

if ( a > b )
then
   print("a 大于 b" )
else
   print("a 小于等于 b" )
end

print("逻辑运算符展示")
a = false
b = true

if ( a and b )
then
   print("a and b - 条件为 true" )
else
   print("a and b - 条件为 false" )
end

if ( not( a and b) )
then
   print("not( a and b) - 条件为 true" )
else
   print("not( a and b) - 条件为 false" )
end

print("运算符优先级展示")
a = 20
b = 10
c = 15
d = 5

e = (a + b) * c / d;-- ( 30 * 15 ) / 5
print("(a + b) * c / d 运算值为  :",e )

e = ((a + b) * c) / d; -- (30 * 15 ) / 5
print("((a + b) * c) / d 运算值为 :",e )

e = (a + b) * (c / d);-- (30) * (15/5)
print("(a + b) * (c / d) 运算值为 :",e )

e = a + (b * c) / d;  -- 20 + (150/5)
print("a + (b * c) / d 运算值为   :",e )